\documentclass[a4paper,10pt,final,notitlepage,narroweqnarray,inline,oneside,article]{article}

\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{graphicx}
\usepackage{epsfig}
\usepackage{epstopdf}

%\newcommand{\latexiie}{\LaTeX2{\Large$_\varepsilon$}}

\begin{document}

\title{Redes Neuronales \\ Trabajo Pr\'actico Especial 1 }

\author{Alan Idesis,\and Daniel Goldberg,\and M. Eugenia Cura}

\maketitle

\section*{Introducci\'on}
En este informe se describir\'a el desarrollo y los resultados obtenidos de implementar una red neuronal multicapa con aprendizaje supervisado
con la cual se resuelve un problema determinado. La funci\'on a resolver en este caso es la siguiente:
\begin{equation}
\label{e1}
y = sin(x)x^3+\frac{x}{2}
\end{equation}
donde $x \in [15,45]$.

La funci\'on que se quiere aprender tiene la forma que se puede ver en la Figura 1.
\begin{figure}
        \centering
		\includegraphics[width = \linewidth,keepaspectratio=true]{f.png}
        \caption{Funci\'on a aprender por la red}
        \label{g1}
\end{figure}


\section*{Desarrollo}
En esta secci\'on se describir\'an todas las consideraciones que se han tenido en cuenta mientras se dise\~naba e implementaba la red neuronal.

Para la implementaci\'on de la red se consideraron varios temas.

El primero fue la capacidad de generalizaci\'on de la red neuronal. Para esto, se realiz\'o una funci\'on en la que se elegian los patrones de entrenamiento y los patrones de testeo. Dependiendo del error que se obtenga al elegir estos conjuntos de patrones, se determina la capacidad de generalizaci\'on que tiene la red.

Para elegir los patrones de testeo utilizamos dos alternativas. Primero probamos con intervalos uniformes. Tambi\'en probamos poner m\'as patrones donde la funci\'on primitiva daba cero.

El segundo tema a considerar fue el de las funciones de activaci\'on. Para esto se utilizar\'on tanto la tangencial hiperb\'olica como la exponencial. Al mismo tiempo se utiliz\'o la funci\'on lineal, la cual se aplica a la ultima capa (la salida), ya que esta no est\'a acotada.

El tercer tema a considerar fue los diferentes tipos de arquitecturas de redes que se pueden utilizar. Dado el problema en cuesti\'on, se utiliz\'o una arquitectura de una entrada y una salida, ya que la funci\'on es $[15,45]\rightarrow\Re $. La cantidad de capas y cu\'antas neuronas hay en cada capa se fue variando emp\'iricamente a medida que se iba probando la capacidad de aprendizaje de la red. Esto se ver\'a con mayor detenimiento en la secci\'on de resultados.

Otro tema importante fue la elecci\'on de los pesos al comienzo de la simulaci\'on. Al tener grandes variaciones en la imagen de nuestra funci\'on, la red saturaba rapidamente. Como alternativa escalamos la funci\'on, como as\'i tambi\'en, redujimos los pesos iniciales para que no sature la red y, emp\'iricamente, modificamos los valores de $\beta$.

El \'ultimo tema a considerar fue el de implementar mejoras al algoritmo de \textit{backpropagation}. Las mejoras que se realizaron en este trabajo fueron el \textit{Momentum}, el \textit{$\eta$ adaptativo} y la \textit{variaci\'on} de 0.1 a la derivada al momento de calcular el $\delta$. Los resultados de estas mejoras se pueden observar en la siguiente secci\'on.

Un tema importante fue poder determinar cuando un patr\'on hac\'ia que la red empeorara su aprendizaje. Por cada patr\'on que ingresaba a la red, se calcul\'o el error de salida. Si este error era mayor al anterior, se descartaban los pesos nuevos y se volv\'ian a como estaban anteriormente.

\section*{Resultados}
En esta secci\'on se muestran los resultados obtenidos a partir de las diferentes configuraciones. Se tomar\'an 3 configuraciones distintas a modo de ejemplo. Al mismo tiempo se discuten las mejoras logradas a partir de los cambios en los conjuntos de patrones de entrenamiento y testeo, y a partir de la implementaci\'on de las mejoras en el algoritmo de \textit{backpropagation} discutidas en la secci\'on anterior.

\subsection*{Configuraci\'on 1}

\begin{figure}
        \centering
		\includegraphics[width = \linewidth,keepaspectratio=true]{conf1.png}
        \caption{Configuraci\'on 1}
        \label{g2}
\end{figure}


\subsection*{Configuraci\'on 2}

\begin{figure}
        \centering
		\includegraphics[width = \linewidth,keepaspectratio=true]{conf2.png}
        \caption{Configuraci\'on 2}
        \label{g3}
\end{figure}


\subsection*{Configuraci\'on 3}

\begin{figure}
        \centering
		\includegraphics[width = \linewidth,keepaspectratio=true]{conf3.png}
        \caption{Configuraci\'on 3}
        \label{g4}
\end{figure}


\section*{Conclusiones}

A pesar de no haber logrado con \'exito el funcionamiento de la red, pudimos sacar algunas conclusiones.

En primer lugar, cuanto m\'as puntos haya en los patrones de entrada donde la funci\'on derivada se anula, la red va a aprender mejor. 

Al ingresar valores grandes de $\eta$ al principio, se puede ver como el error bajaba drasticamente en las primeras \'epocas aunque nunca logramos valores aceptables para el aprendizaje. Adem\'as, al implementar $\eta$ adaptativo logramos bajar un poco mas el error.


\end{document}
